package controller;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import util.Banquinho;

import entites.Produto;

public class CrudProdutos {

	public static List<Produto> getProdutos() {
		return Banquinho.getInstance().getProdutos();
	}

	public void addProduto(Produto produto) {
		getProdutos().add(produto);
	}

	public Produto buscarProduto(String codigo) {
		for (Produto p : getProdutos())
			if (p.getCodigo().equals(codigo))
				return p;
		return null;
	}

	public boolean produtoExiste(String codigo) {
		return (this.buscarProduto(codigo) != null);
	}

	public boolean removeProduto(Produto produto) {
		return (getProdutos().remove(produto));
	}

	public boolean removeProduto(String codigo) {
		Produto produto = this.buscarProduto(codigo);
		if (produto == null)
			return false;
		return (getProdutos().remove(produto));

	}

	public static boolean update(Produto e) {
		for (int i = 0; i < getProdutos().size(); i++) {
			if (getProdutos().get(i).getCodigo() == e.getCodigo()) {
				getProdutos().set(i, e);
				return true;
			}
		}
		return false;
	}

	public boolean updateProduto(Produto produto) {
		for (Produto p : getProdutos())
			if (p.equals(produto)) {
				p.setPreco(produto.getPreco());
				return true;
			}
		return false;
	}

	public List<Produto> getAllProdutos() {
		return getProdutos();
	}

	private List<Produto> ordenaPorTipo(int tipo) {
		List<Produto> produtosOrdenados = new ArrayList<Produto>(getProdutos());
		Collections.sort(produtosOrdenados, new ComparadorProduto(tipo));
		return (produtosOrdenados);
	}

	public List<Produto> getAllOrdenadosPorCodigo() {
		return (ordenaPorTipo(ComparadorProduto.CODIGO));
	}

	public List<Produto> getAllOrdenadosPorNome() {
		return (ordenaPorTipo(ComparadorProduto.NOME));
	}

	public List<Produto> getAllOrdenadosPorTipo() {
		return (ordenaPorTipo(ComparadorProduto.TIPO));
	}

	public List<Produto> getAllOrdenadosPorPreco() {
		return (ordenaPorTipo(ComparadorProduto.PRECO));
	}

	public void iniciaProdutos() {
/*
		getProdutos().add(new Produto("001", "Cod. Black ops II", "jogo ps3", 150));
		getProdutos().add(new Produto("002", "Final fantasy xiii", "jogo ps3", 100));
		getProdutos().add(new Produto("003", "Golf", "jogo psvita", 110));
		getProdutos().add(new Produto("004", "Uncharted", "jogo psvita", 120));
*/
	}

	public static Produto search(String codSearch) {
		for (Produto i : getProdutos()) {
			if (i.getCodigo() == codSearch) {
				return i;
			}
		}
		return null;
	}
}
